package com.web.common.utils.freemarker;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Locale;

import com.css.sword.platform.web.comm.WebRootUtil;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;

public class FreemarkerUtil {

		private static Configuration config=new Configuration();
		private static Object obj = new Object();
		
		/**
		 * 实现单例模式
		 * @return
		 */
		public static Configuration getConfig() {
			if (config == null) {
				synchronized (obj) {
					if (null == config) {
						config = new Configuration();
						obj.notifyAll();
					}
				}
			}
			return config;
		}
		
		/**
		 * 注意：setEncoding这个方法一定要设置国家及其编码，不然在flt中的中文在生成html后会变成乱码
		 * @param filePath 文件路径
		 * @throws Exception
		 */
		public static void init(String ftlPath) throws Exception {
		 	config.setLocale(Locale.CHINA);
		    config.setDefaultEncoding("utf-8");
		    config.setEncoding(Locale.CHINA, "utf-8");
		    config.setObjectWrapper(new DefaultObjectWrapper());
		    config.setDirectoryForTemplateLoading(new File(ftlPath));
		}
		
		/**
		 * 通过flt文件用html文件展示课程数据
		 * @param ftlPath flt文件路径
		 * @param templateFile flt模板文件
		 * @param list 要生成html的集合数据
		 * @param charset flt生成数据的编码格式
		 * @param htmlFile 通过flt生成html的文件
		 * @throws Exception
		 */
		public static boolean genHtml(String templateFile, Object data, String charset, String htmlFile) throws Exception {
			String ftlPath=WebRootUtil.getWebRootPath()+"/pages/template/ftl/";
			boolean flag=true;
			try {
				init(ftlPath);
				Template temp = getConfig().getTemplate(templateFile);
				Writer out=new OutputStreamWriter(new FileOutputStream(htmlFile), charset);
				temp.process(data, out);
				out.flush();
				out.close();
				System.out.println("成功生成目标文件！");
			} catch (Exception e) {
				e.printStackTrace();
				flag = false;
			}
			return flag;
		}
}
